<?php
declare (strict_types = 1);

namespace app\api\common\middleware;

use app\Request;
use think\middleware\AllowCrossDomain;


class AllowCrossOriginMiddleware
{
    /**
     * 处理请求
     *
     * @param \app\Request $request
     * @param \Closure     $next
     *
     * @return mixed|void
     */
    public function handle(Request $request, \Closure $next)   //在某些需求下，可以使用第三个参数传入额外的参数。
    {
		// 处理 OPTIONS 请求
		if($_SERVER['REQUEST_METHOD'] == 'OPTIONS')
        {
		    header("'Access-Control-Allow-Credentials: true");
		    header("Access-Control-Allow-Origin: *");
		    header("Access-Control-Allow-Headers: Anthor, Authorization, Content-Type, If-Match, If-Modified-Since, If-None-Match, If-Unmodified-Since, X-CSRF-TOKEN, X-Requested-With, X-Token");
		    header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS, PATCH');
		    exit; // 直接退出，不走后序流程
		}

        //给控制器传参：
        //$request->hello = 'ThinkPHP';
        // 判断当前浏览器环境是在微信或支付宝
        // if (preg_match('~micromessenger~i', $request->header('user-agent'))) {
        //     $request->InApp = 'WeChat';
        //     } else if (preg_match('~alipay~i', $request->header('user-agent'))) {
        //     $request->InApp = 'Alipay';
        //     }
        // return $next($request);

		return $next($request);
    }


    //中间件支持定义请求结束前的回调机制，你只需要在中间件类中添加 end 方法。
    public function end(\think\Response $response)
    {
        //不能有任何的响应输出。 因为回调触发的时候请求响应输出已经完成了。

        //回调行为
        //echo "end";
    }
}
